package com.yuma.ai.controller;

import org.springframework.ai.chat.messages.Message;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.model.Generation;
import org.springframework.ai.chat.prompt.ChatOptions;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.chat.prompt.SystemPromptTemplate;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@RestController
public class ChatDeepSeekController {

    @Autowired
    private OpenAiChatModel openAiChatModel;

    @GetMapping("/ai/generate")
    public String generate(@RequestParam(value="message", defaultValue = "hello") String message){
        return  this.openAiChatModel.call(message);
    }

    @GetMapping("/ai/chat")
    public String chat(@RequestParam(value="message", defaultValue = "hello") String message){
        ChatResponse response = openAiChatModel.call(
                new Prompt(
                        message,  // 客户提问的内容
                        ChatOptions.builder()   // 选项
                                .model("deepseek-chat") // 可设置大模型
                                .temperature(0.7)  // 多样性
                                .build()
                )
        );
        return response.getResult().getOutput().getContent();
    }

    @GetMapping("/prompt")
    public String prompt(@RequestParam(value="name") String name,@RequestParam("check") String check ,@RequestParam(value="hobby") String hobby){
        // 设置用户输入信息
        UserMessage userMessage = new UserMessage(check);
        // 使用PromptTemplate设置信息
        SystemPromptTemplate systemPromptTemplate = new SystemPromptTemplate("你是一个美食咨询助手，可以帮助人们查询美食信息。你得名字是{name}，你应该用你的名字和{hobby}的饮食习惯回复用户的请求。");
        // 替换占位符
        Message systemMessage = systemPromptTemplate.createMessage(Map.of("name", name, "hobby", hobby));
        // 提示词：用户提问和系统身份
        Prompt prompt = new Prompt(List.of(userMessage, systemMessage));
        // 使用chatModel方法
        List<Generation> results = openAiChatModel.call(prompt).getResults();
        return results.stream().map(x->x.getOutput().getContent()).collect(Collectors.joining(" "));
    }
}
